<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>php学习笔记[014]</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="show"><span>014 PHP上传原理</span></div>
<?php include 'include/top.php';?>

<div class="text">
<b>form的enctype属性</b>
我们经常使用的表单<strong>from</strong>在传输数据时,默认的编码是<strong>application/x-www-form-urlencoded</strong>格式的,而这种格式并不能传输文件.所以,在我们需要学习之前,我们要知道怎么把表单的<strong>enctype</strong>属性设置为<strong>multipart/form-data</strong>才能使用.下面我们会实例来区分两个格式的情况.<br />
<div class="code">&lt;form enctype=&quot;application/x-www-form-urlencoded&quot; name=&quot;form1&quot;&gt;<br />
	&lt;input size=&quot;25&quot; type=&quot;text&quot; /&gt;<br />
	&lt;input type=&quot;submit&quot;  /&gt;<br />
	&lt;/form&gt;<br />
	&lt;form enctype=&quot;multipart/form-data&quot; name=&quot;form2&quot; method=&quot;post&quot; action=&quot;study014.php&quot;&gt;<br />
	&lt;input name=&quot;file&quot; size=&quot;25&quot; type=&quot;file&quot; /&gt;<br />
	&lt;input type=&quot;submit&quot;  /&gt;<br />
	&lt;/form&gt;</div>
	注意观察两个的细节.下面是效果上的差别.
<div class="effect">
<form enctype="application/x-www-form-urlencoded" name="form1">
<input size="25" type="text" />
<input type="submit"  />
</form>
<form enctype="multipart/form-data" name="form2" method="post" action="study014.php">
<input name="file" size="25" type="file" />
<input type="submit"  />
</form>
</div>

</div>

<div class="text">
<b>$_FILES系统函数</b>
设置了表单,还需要一个函数来处理上传的文件.在这里我们用到了<strong>$_FILES</strong>这个函数.<br />
这个函数的用法也非常的简单,<strong>$_FILES['input框name']</strong>我们还是用演示的方式来清晰的说明这一切.<br />
<div class="code">
&lt;?php<br />
print_r($_FILES['file']);<br />
?&gt;</div>
我们来观察其效果.
<div class="effect">
<?php
@print_r($_FILES['file']);
?>
</div>
我们看到运算结果是这样的:Array (<br />
[name] => <?php echo @$_FILES['file']['name'] ;?> //上传文件名称<br />
[type] =><?php echo @$_FILES['file']['type'] ;?> 	//上传文件的格式<br />
[tmp_name] => <?php echo @$_FILES['file']['tmp_name'] ;?>  	//上传文件在服务器缓存路径.<br />
[error] => <?php echo @$_FILES['file']['error'] ;?> 	//警报<br />
[size] => <?php echo @$_FILES['file']['size'] ;?> //上传文件的大小(单位字节)<br />
)
</div>

<div class="text">
<b>move_uploaded_file系统函数</b>
这个函数的作用是把缓存内的文件移动到我们想要存放的位置.其用法也非常简单,<br />
<strong>move_uploaded_file(临时文件,目标位置和文件名)</strong>
为了更方便我们在介绍完下一个函数后利用实例来说明这一切.<br />
</div>

<div class="text">
<b>is_uploaded_file系统函数</b>
这是一个判断是否有上传文件的函数.其用法也类似于前面学到的is前缀函数.

<div class="code">
	<p>&lt;?php<br />
		$name=@$_FILES['file']['name'];<br />
		$name1=iconv('utf-8','gbk',$name);//这里需要把文件名改为GBK模式,如果页面为GBK编码,就不需要这个操作了!;<br />
		$type=@$_FILES['file']['type'];<br />
		$tmp_name=@$_FILES['file']['tmp_name'];<br />
		$error=@$_FILES['file']['error'];<br />
		$size=@$_FILES['file']['size'];</p>
	<p>if(is_uploaded_file($tmp_name)){<br />
		echo $tmp_name;<br />
		move_uploaded_file($tmp_name,'upload/'.time().&quot;$name1&quot;);<br />
		};<br />
		?&gt;</p>
</div>
其运行效果如下:
<div class="effect">
<?php
$name=@$_FILES['file']['name'];
$name1=iconv('utf-8','gbk',$name);
$type=@$_FILES['file']['type'];
$tmp_name=@$_FILES['file']['tmp_name'];
$error=@$_FILES['file']['error'];
$size=@$_FILES['file']['size'];

if(is_uploaded_file($tmp_name)){
echo $tmp_name.'|'.$name.'<br />';
move_uploaded_file($tmp_name,'upload/'.time()."$name1");
};
?>
</div>

有时候为了修改为我们需要的文件名,我们需要提取上传文件的后缀名来重命名,我们使用一个函数.先不用理解.<br />
<div class="code">
&lt;?php<br />
function gontenfile($filename){<br />
$extend = pathinfo($filename); //将$filename分割为一个数组里面有文件所在目录，文件名（带后缀的），后缀名和不带后缀的文件名.可以用print_r查看结构.<br />
$extend = strtolower($extend[&quot;extension&quot;]); //为了美观,转换为小写. <br />
return $extend;<br />
}<br />
$namelast= gontenfile($name);<br />
echo $namelast;<br />
?&gt;<br />
</div>
我们输出这个,至于使用可以自由发挥.
<div class="effect">
<?php
function gontenfile($filename){
$extend = pathinfo($filename);   
$extend = strtolower($extend["extension"]);   
return $extend;
}
$namelast= gontenfile($name);
echo $namelast;
?>
</div>

</div>

</body>
</html>
